import os
import re
import pandas as pd
from docx import Document
import matplotlib.pyplot as plt

"""
@FileName：ClusterAnalysis.py
@Description：

@Author：HeYiQing
@Time：2024/5/14 21:32
"""


def get_name(tables):
    # 个人基本信息
    info_table = tables[0]
    name = info_table.cell(0, 3).text
    return name


def get_tables(path, file_name):
    abs_file_path = os.path.join(path, file_name)
    file = Document(abs_file_path)
    tables = file.tables
    return tables


# 强迫症 外向性 总分
def get_data(tables, file_name):
    data_table = tables[1]
    if 'SCL' in file_name:
        # 强迫症状->原始分
        Q_P_Z_Z = float(data_table.cell(2, 4).text[0:4])
        return Q_P_Z_Z
    elif '职业成熟度' in file_name:
        # 总分->原始分
        Z_F = int(data_table.cell(9, 1).text)
        return Z_F
    else:
        # 外向性->原始分
        W_X_X = int(data_table.cell(2, 1).text)
        return W_X_X


def save_data(data):
    # 初始化一个空字典来收集合并后的数据
    merged_data = {}
    # 遍历数据项
    for item in data:
        name = item[0]
        value = item[1]
        filename = item[2]
        # 根据文件名设置列名
        if 'SCL90' in filename:
            column_name = 'SCL90-强迫症状-均分'
        elif '大五人格量表' in filename:
            column_name = '大五人格量表-外向性'
        elif '职业成熟度量表' in filename:
            column_name = '职业成熟度-总分'
        else:
            # 如果文件名不匹配任何已知的量表，可以跳过或添加错误处理
            continue
            # 如果该姓名还没有在merged_data中，则初始化一个空字典
        if name not in merged_data:
            merged_data[name] = {column_name: value}
            # 如果该姓名已经存在，则更新对应的列的值
        else:
            merged_data[name][column_name] = value
            # 将合并后的数据转换为DataFrame
    df = pd.DataFrame(merged_data).T.reset_index()
    df.columns = ['姓名', 'SCL90-强迫症状-均分', '大五人格量表-外向性', '职业成熟度-总分']
    # 如果需要，按姓名排序
    df = df.sort_values(by='姓名')
    # 保存到Excel文件
    path = "F:/比赛/数学建模/24/repo/ClusterAnalysis(聚类分析)/avg_w_all.xlsx"
    df.to_excel(path, index=False, engine='openpyxl')


if __name__ == '__main__':
    file_dir_A = r"E:\code_special\Gitee\Math_C\repo\A组--69名测试者"
    file_dir_B = r"E:\code_special\Gitee\Math_C\repo\B组--79名测试者"
    file_list_A = os.listdir(file_dir_A)
    file_list_B = os.listdir(file_dir_B)
    res_list_A = []
    for file_name in file_list_A:
        t_list = []
        tables = get_tables(file_dir_A, file_name)
        name = get_name(tables)
        data = get_data(tables, file_name)
        t_list.append(name)
        t_list.append(data)
        t_list.append(file_name)
        res_list_A.append(t_list)
    res_list_B = []
    for file_name in file_list_B:
        t_list = []
        tables = get_tables(file_dir_B, file_name)
        name = get_name(tables)
        data = get_data(tables, file_name)
        t_list.append(name)
        t_list.append(data)
        t_list.append(file_name)
        res_list_B.append(t_list)
    res_list = res_list_A + res_list_B
    save_data(res_list)
